#pragma once

#include <opencv2\core\core.hpp>
#include <opencv2\imgproc\imgproc.hpp>

class Histogram1D
{
public:
	Histogram1D(void);
	~Histogram1D(void);

	void  setChannel(int c) {channels[0]= c;	}
	int   getChannel() {	return channels[0];	}

	void  setRange(float minValue, float maxValue) {	hranges[0]= minValue, hranges[1]= maxValue; }
	float getMinValue() {return hranges[0];	}
	float getMaxValue() {return hranges[1];	}

	void  setNBins(int nbins) {	histSize[0]= nbins;	} //Sets the number of bins in histogram
	int   getNBins() {	return histSize[0];	}

	cv::MatND getHistogram(const cv::Mat &image);
	cv::Mat   getHistogramImage(const cv::Mat &image);
	cv::Mat   equalize(const cv::Mat &image); 
	cv::Mat   stretch(const cv::Mat &image, int minValue=0); 
	cv::Mat	  applyLookUp(const cv::Mat& image, const cv::MatND& lookup); 

 private:

    int histSize[1];
	float hranges[2];
    const float* ranges[1];
    int channels[1];
};


